package nan.String;

class OuterClass{
    public int data1=99;
    private int data2;
    public static int data3;
//    class InnerClass{
//        public int data1=100;
//        public static final int data5=0;
//        public void func(){
//            System.out.println(data1);
//            System.out.println(OuterClass.this.data1);
//        }
//    }
    /*
    静态内部类：
    1、如何实例化静态内部对象
     OuterClass.InnerClass2 innerClass2=new OuterClass.InnerClass2();
     2.静态内部类不能访问外部类的实例数据成员的
     */
     static class InnerClass2{
         public int data4;
         private int data5;
         public static int data6;
         public void func(){
             System.out.println(data6);
         }
}
}
/*
实例内部类：你可以把它看作是外部类的实例的成员（方法）
1、在实例内部类当中不能定义静态的成员变量的，非要定义定义为public static final int data5=0;
此时定义的编译在编译时期就确定其值了
2、如何实例化内部类对象
OuterClass.InnerClass innerClass=outerclass.new InnerClass();
3.如何访问和外部类同名的属性？
实例内部类当中，包含了外部类的this引用
其实this相当于是一个静态的引用
4、内部类生成的字节码问价：外部类$内部类.class
 */

public class Main4 {
//    public static void main(String[] args) {
//        OuterClass outerclass=new OuterClass();
//        OuterClass.InnerClass innerClass=outerclass.new InnerClass();//通过外部类对象的引用
//        //innerClass类型为OuterClass.InnerClass
//        innerClass.func();
//    }
public static void main(String[] args) {
    OuterClass.InnerClass2 innerClass2=new OuterClass.InnerClass2();
}
}
